package com.aiapphub.BaseCode.controller;

import com.aiapphub.BaseCode.service.SSOLoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

// 定义为控制器组件，并指定处理的基本URL路径


@RestController
@RequestMapping("/SSOlogin")
public class SSOLoginController {

    @Autowired
    private SSOLoginService ssoLoginService;

    /**
     * 获取 SSO 登录的 URL
     * @param response
     * @throws IOException
     */
    @GetMapping("/login")
    public void login(HttpServletResponse response) throws IOException {
        try {
            // 通过 ssoLoginService 获取登录 URL
            String loginUrl = ssoLoginService.buildLoginUrl();
            // 检查登录 URL 是否有效
            if (loginUrl != null && !loginUrl.isEmpty()) {
                // 重定向到 SSO 登录 URL
                response.sendRedirect(loginUrl);
            } else {
                // 如果登录 URL 无效，发送 400 错误响应
                response.sendError(HttpServletResponse.SC_BAD_REQUEST, "无效的登录 URL");
            }
        } catch (IOException e) {
            // 记录异常并发送 500 错误响应
            e.printStackTrace(); // 或者使用日志框架记录
            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "重定向到登录页面时发生错误");
        }
    }


    /**
     * 处理SSO回调请求
     *
     * @param code 从SSO系统返回的授权码
     * @param session 当前会话
     * @param response HTTP响应
     * @throws IOException 如果处理请求时出错
     */
    @GetMapping("/callback")
    public void callback(@RequestParam("code") String code, HttpSession session, HttpServletResponse response) throws IOException {
        try {
            // 调用服务层处理回调请求
            ssoLoginService.handleSSOCallback(code, session, response);
        } catch (Exception e) {
            e.printStackTrace();
            // 处理异常并返回500错误
            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "处理回调请求时出错");
        }
    }

    /**
     * 处理登出请求并进行重定向
     *
     * @param redirectUrl 重定向的 URL
     * @param request HTTP 请求对象
     * @param response HTTP 响应对象
     * @throws IOException 可能抛出的 IO 异常
     */
    @GetMapping("/portal/sso/logout.html")
    public void logout(@RequestParam(value = "redirectUrl", required = false) String redirectUrl,
                       HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 执行登出操作
        ssoLoginService.handleLogout(request, response, redirectUrl);
    }


}